﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Text;

using com.vs.DataAccess;
using com.vs.General;

namespace com.vs.DataAccess.DO 
{
    public partial class TaskDetailDO : BaseDO
    {

        #region "Get Model"
        /// <summary>
        /// 将符合数据库主键的持久对象提取到模型对象中，如数据库符合条件的持久对象不存在，则返回空对象
        /// </summary>
        /// <remarks></remarks>
        public static TaskDetailDO GetModelByPK(Session sess, int iTaskLnNum)
        {
            DataHelper helper = null;
            DataTable dtModel = null;

            try
            {
                helper = new DataHelper(sess);
                dtModel = helper.GetTable(CommandType.Text, SelectSequel + "WHERE INTERNAL_TASK_LINE_NUM = @INTERNAL_TASK_LINE_NUM", new IDataParameter[]{
                    DataHelper.BuildParameter(sess, "@INTERNAL_TASK_LINE_NUM", iTaskLnNum)
                });
                if (!DataManager.IsEmpty(dtModel))
                {
                    return GetModel(dtModel.Rows[0]);
                }
                else
                {
                    return null;
                }
            }
            catch (Exception e)
            {
                ExceptionManager.LogException(sess, e);
                return null;
            }
            finally
            {
                if (helper != null)
                    helper.Dispose();
            }


        }

        #endregion

        #region "DataBase Operation"
        /// <summary>
        /// 在数据库里创建该数据访问对象的持久化数据，同时自增长属性INTERNAL_TASK_NUM也会同时得到更新,并提供数据库事务支持
        /// </summary>
        /// <remarks></remarks>
        public int Insert(Session sess)
        {
            DataHelper helper = null;
            IDataParameter[] paras = null;
            string stSQL = "TSK_ITaskDetail";
            try
            {
                helper = new DataHelper(sess);
                paras = ValueParas(this);
                return helper.Insert(CommandType.StoredProcedure, stSQL, paras);
            }
            catch (Exception e)
            {
                ExceptionManager.LogException(sess, e);
                return 0;
            }
            finally
            {
                if (helper != null)
                    helper.Dispose();
            }

        }

        public void Delete(Session sess)
        {
            DataHelper helper = null;
            string stSQL = "TSK_DTaskDetail";
            try
            {
                helper = new DataHelper(sess);
                helper.Update(CommandType.StoredProcedure, stSQL, UpdateWherePara(this));
            }
            catch (Exception e)
            {
                ExceptionManager.LogException(sess, e);
            }
            finally
            {
                if (helper != null)
                    helper.Dispose();
            }

        }

        /// <summary>
        /// 将该数据访问对象的变化同步到数据库中，如果该数据访问对象在数据库中的持久数据不存在，同步不会发生，同时也不会抛出例外
        /// </summary>
        /// <remarks></remarks>
        public string Update(Session sess)
        {
            DataHelper helper = null;
            string stSQL = "TSK_UTaskDetail";
            try
            {
                helper = new DataHelper(sess);
                helper.Update(CommandType.StoredProcedure, stSQL, ValueParas(this));
                return null;
            }
            catch (Exception e)
            {
                ExceptionManager.LogException(sess, e);
                return MessageManager.MSG_GEN_000;
            }
            finally
            {
                if (helper != null)
                    helper.Dispose();
            }
        }

        public string Update(Session sess, Dictionary<string, object> dcData)
        {
            DataHelper helper = null;
            StringBuilder sbSQL = null;
            string stSQL = null;
            int i = 0;
            IDataParameter[] paras = null;

            try
            {
                if (dcData.Count < 1)
                    return null;
                helper = new DataHelper(sess);
                sbSQL = new StringBuilder(256)
                            .Append(" UPDATE TASK_DETAIL SET ");
                paras = new IDataParameter[dcData.Count + 1];
                foreach (KeyValuePair<string, object> kvp in dcData)
                {
                    sbSQL.Append(kvp.Key).Append(" = @Value").Append(i).Append(",");
                    paras[i] = new SqlParameter("@Value" + i, kvp.Value);
                    i++;
                }

                stSQL = sbSQL.ToString();
                stSQL = stSQL.Substring(0, stSQL.Length - 1);

                stSQL = stSQL + " WHERE INTERNAL_TASK_LINE_NUM = @INTERNAL_TASK_LINE_NUM";
                paras[i] = new SqlParameter("@INTERNAL_TASK_LINE_NUM", this.INTERNAL_TASK_LINE_NUM);

                helper.Update(CommandType.Text, stSQL, paras);

                return null;
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                if (helper != null)
                    helper.Dispose();
            }
        }
        #endregion

        #region "Data Load"
        /// <summary>
        /// 装载对象WORKTASK的所有持久性对象到集合，如果数据量大，调用此方法会造成性能上的问题，请谨慎使用
        /// </summary>
        /// <remarks></remarks>
        public static List<TaskDetailDO> GetAll(Session sess)
        {
            DataHelper helper = null;
            DataTable dtModel = null;

            try
            {
                helper = new DataHelper(sess);
                dtModel = helper.GetTable(CommandType.Text, SelectSequel);
                return LoadListFromDataView(dtModel.DefaultView);
            }
            catch (Exception e)
            {
                ExceptionManager.LogException(sess, e);
                return null;
            }
            finally
            {
                if (helper != null)
                    helper.Dispose();
            }
        }

        /// <summary>
        /// 装载指定列的值等于指定值的的所有持久性WORKTASK对象到集合
        /// </summary>
        /// <remarks></remarks>
        public static DataTable GetTableByColumn(Session sess, string columnName, Object value)
        {
            DataHelper helper = null;
            IDataParameter[] paras = null;
            string stSQL = null;

            try
            {
                helper = new DataHelper(sess);
                stSQL = SelectSequel + " Where [" + columnName + "] =@Value ";
                paras = new IDataParameter[]{
			new SqlParameter( "@Value", value)
		};
                return helper.GetTable(CommandType.Text, stSQL, paras);
            }
            catch (Exception e)
            {
                ExceptionManager.LogException(sess, e);
                return null;
            }
            finally
            {
                if (helper != null)
                    helper.Dispose();
            }
        }

        public static List<TaskDetailDO> GetListByColumn(Session sess, string columnName, Object value)
        {
            DataTable dtModel = null;

            try
            {
                dtModel = GetTableByColumn(sess, columnName, value);
                return LoadListFromDataView(dtModel.DefaultView);
            }
            catch (Exception e)
            {
                ExceptionManager.LogException(sess, e);
                return null;
            }
            finally
            {
            }
        }

        /// <summary>
        /// 从DataView装载持久性WORKTASK对象到集合
        /// </summary>
        /// <remarks></remarks>
        public static List<TaskDetailDO> LoadListFromDataView(DataView dv)
        {
            List<TaskDetailDO> list = new List<TaskDetailDO>();
            for (int index = 0; index <= dv.Count - 1; index++)
            {
                list.Add(GetModel(dv[index].Row));
            }
            return list;
        }

        /// <summary>
        /// loading data value  to property from Datarow
        /// </summary>
        /// <remarks></remarks>
        private static TaskDetailDO GetModel(DataRow row)
        {
            TaskDetailDO workDO = new TaskDetailDO();
            if (!row["INTERNAL_TASK_LINE_NUM"].Equals(DBNull.Value)) workDO.INTERNAL_TASK_LINE_NUM = Convert.ToInt32(row["INTERNAL_TASK_LINE_NUM"]);
            if (!row["TASK_TYPE"].Equals(DBNull.Value)) workDO.TASK_TYPE = Convert.ToString(row["TASK_TYPE"]);
            if (!row["INTERNAL_TASK_NUM"].Equals(DBNull.Value)) workDO.INTERNAL_TASK_NUM = Convert.ToInt32(row["INTERNAL_TASK_NUM"]);
            if (!row["TASK_ID"].Equals(DBNull.Value)) workDO.TASK_ID = Convert.ToString(row["TASK_ID"]);
            if (!row["CONDITION"].Equals(DBNull.Value)) workDO.CONDITION = Convert.ToString(row["CONDITION"]);
            if (!row["REFERENCE_ID"].Equals(DBNull.Value)) workDO.REFERENCE_ID = Convert.ToString(row["REFERENCE_ID"]);
            if (!row["REFERENCE_NUM_TYPE"].Equals(DBNull.Value)) workDO.REFERENCE_NUM_TYPE = Convert.ToString(row["REFERENCE_NUM_TYPE"]);
            if (!row["REFERENCE_NUM"].Equals(DBNull.Value)) workDO.REFERENCE_NUM = Convert.ToInt32(row["REFERENCE_NUM"]);
            if (!row["REFERENCE_LINE_NUM"].Equals(DBNull.Value)) workDO.REFERENCE_LINE_NUM = Convert.ToInt32(row["REFERENCE_LINE_NUM"]);
            if (!row["COMPANY"].Equals(DBNull.Value)) workDO.COMPANY = Convert.ToString(row["COMPANY"]);
            if (!row["ITEM"].Equals(DBNull.Value)) workDO.ITEM = Convert.ToString(row["ITEM"]);
            if (!row["ITEM_DESC"].Equals(DBNull.Value)) workDO.ITEM_DESC = Convert.ToString(row["ITEM_DESC"]);
            if (!row["TOTAL_QTY"].Equals(DBNull.Value)) workDO.TOTAL_QTY = Convert.ToInt32(row["TOTAL_QTY"]);
            if (!row["FROM_QTY"].Equals(DBNull.Value)) workDO.FROM_QTY = Convert.ToInt32(row["FROM_QTY"]);
            if (!row["TO_QTY"].Equals(DBNull.Value)) workDO.TO_QTY = Convert.ToInt32(row["TO_QTY"]);
            if (!row["QUANTITY_UM"].Equals(DBNull.Value)) workDO.QUANTITY_UM = Convert.ToString(row["QUANTITY_UM"]);
            if (!row["WAREHOUSE"].Equals(DBNull.Value)) workDO.WAREHOUSE = Convert.ToString(row["WAREHOUSE"]);
            if (!row["FROM_LOC"].Equals(DBNull.Value)) workDO.FROM_LOC = Convert.ToString(row["FROM_LOC"]);
            if (!row["TO_LOC"].Equals(DBNull.Value)) workDO.TO_LOC = Convert.ToString(row["TO_LOC"]);
            if (!row["FROM_LPN"].Equals(DBNull.Value)) workDO.FROM_LPN = Convert.ToString(row["FROM_LPN"]);
            if (!row["TO_LPN"].Equals(DBNull.Value)) workDO.TO_LPN = Convert.ToString(row["TO_LPN"]);
            if (!row["ASSIGNED_USER"].Equals(DBNull.Value)) workDO.ASSIGNED_USER = Convert.ToString(row["ASSIGNED_USER"]);
            if (!row["ATTRIBUTE_NUM"].Equals(DBNull.Value)) workDO.ATTRIBUTE_NUM = Convert.ToInt32(row["ATTRIBUTE_NUM"]);
            if (!row["USER_STAMP"].Equals(DBNull.Value)) workDO.USER_STAMP = Convert.ToString(row["USER_STAMP"]);
            if (!row["DATE_TIME_STAMP"].Equals(DBNull.Value)) workDO.DATE_TIME_STAMP = Convert.ToDateTime(row["DATE_TIME_STAMP"]);
            if (!row["INTERNAL_TASK_TYPE"].Equals(DBNull.Value)) workDO.INTERNAL_TASK_TYPE = Convert.ToString(row["INTERNAL_TASK_TYPE"]);
            if (!row["ATTRIBUTE1"].Equals(DBNull.Value)) workDO.ATTRIBUTE1 = Convert.ToString(row["ATTRIBUTE1"]);
            if (!row["ATTRIBUTE2"].Equals(DBNull.Value)) workDO.ATTRIBUTE2 = Convert.ToString(row["ATTRIBUTE2"]);
            if (!row["ATTRIBUTE3"].Equals(DBNull.Value)) workDO.ATTRIBUTE3 = Convert.ToString(row["ATTRIBUTE3"]);
            if (!row["ATTRIBUTE4"].Equals(DBNull.Value)) workDO.ATTRIBUTE4 = Convert.ToString(row["ATTRIBUTE4"]);
            if (!row["ATTRIBUTE5"].Equals(DBNull.Value)) workDO.ATTRIBUTE5 = Convert.ToString(row["ATTRIBUTE5"]);
            if (!row["ATTRIBUTE6"].Equals(DBNull.Value)) workDO.ATTRIBUTE6 = Convert.ToString(row["ATTRIBUTE6"]);
            if (!row["ATTRIBUTE7"].Equals(DBNull.Value)) workDO.ATTRIBUTE7 = Convert.ToString(row["ATTRIBUTE7"]);
            if (!row["ATTRIBUTE8"].Equals(DBNull.Value)) workDO.ATTRIBUTE8 = Convert.ToString(row["ATTRIBUTE8"]);
            if (!row["CURRENT_LOC"].Equals(DBNull.Value)) workDO.CURRENT_LOC = Convert.ToString(row["CURRENT_LOC"]);
            if (!row["CURRENT_LPN"].Equals(DBNull.Value)) workDO.CURRENT_LPN = Convert.ToString(row["CURRENT_LPN"]);
            if (!row["INVENTORY_STS"].Equals(DBNull.Value)) workDO.INVENTORY_STS = Convert.ToString(row["INVENTORY_STS"]);
            if (!row["INTERNAL_WAVE_NUM"].Equals(DBNull.Value)) workDO.INTERNAL_WAVE_NUM = Convert.ToInt32(row["INTERNAL_WAVE_NUM"]);
            if (!row["REFERENCE_CONT_NUM"].Equals(DBNull.Value)) workDO.REFERENCE_CONT_NUM = Convert.ToInt32(row["REFERENCE_CONT_NUM"]);
            if (!row["REFERENCE_REQ_NUM"].Equals(DBNull.Value)) workDO.REFERENCE_REQ_NUM = Convert.ToInt32(row["REFERENCE_REQ_NUM"]);

            return workDO;
        }

        #endregion

        #region "Other function"
        /// <summary>
        /// 该数据访问对象从数据库中提取数据的Sql语句 
        /// </summary>
        /// <remarks></remarks>
        private static string SelectSequel
        {
            get
            {
                return "Select	*  From [TASK_DETAIL] ";
            }
        }

        /// <summary>
        /// 该数据访问对象的属性值装载到数据库更新参数数组
        /// </summary>
        /// <remarks></remarks>
        private static IDbDataParameter[] ValueParas(TaskDetailDO workDO)
        {
            SqlParameter[] paras = new SqlParameter[41];
            paras[0] = new SqlParameter("@INTERNAL_TASK_LINE_NUM", workDO.INTERNAL_TASK_LINE_NUM);
            paras[1] = new SqlParameter("@TASK_TYPE", workDO.TASK_TYPE == String.Empty ? DBNull.Value : (object)workDO.TASK_TYPE);
            paras[2] = new SqlParameter("@INTERNAL_TASK_NUM", workDO.INTERNAL_TASK_NUM == 0 ? DBNull.Value : (object)workDO.INTERNAL_TASK_NUM);
            paras[3] = new SqlParameter("@TASK_ID", workDO.TASK_ID == String.Empty ? DBNull.Value : (object)workDO.TASK_ID);
            paras[4] = new SqlParameter("@CONDITION", workDO.CONDITION == String.Empty ? DBNull.Value : (object)workDO.CONDITION);
            paras[5] = new SqlParameter("@REFERENCE_ID", workDO.REFERENCE_ID == String.Empty ? DBNull.Value : (object)workDO.REFERENCE_ID);
            paras[6] = new SqlParameter("@REFERENCE_NUM_TYPE", workDO.REFERENCE_NUM_TYPE == String.Empty ? DBNull.Value : (object)workDO.REFERENCE_NUM_TYPE);
            paras[7] = new SqlParameter("@REFERENCE_NUM", workDO.REFERENCE_NUM);
            paras[8] = new SqlParameter("@REFERENCE_LINE_NUM", workDO.REFERENCE_LINE_NUM);
            paras[9] = new SqlParameter("@COMPANY", workDO.COMPANY == String.Empty ? DBNull.Value : (object)workDO.COMPANY);
            paras[10] = new SqlParameter("@ITEM", workDO.ITEM == String.Empty ? DBNull.Value : (object)workDO.ITEM);
            paras[11] = new SqlParameter("@ITEM_DESC", workDO.ITEM_DESC == String.Empty ? DBNull.Value : (object)workDO.ITEM_DESC);
            paras[12] = new SqlParameter("@TOTAL_QTY", workDO.TOTAL_QTY);
            paras[13] = new SqlParameter("@FROM_QTY", workDO.FROM_QTY);
            paras[14] = new SqlParameter("@QUANTITY_UM", workDO.QUANTITY_UM == String.Empty ? DBNull.Value : (object)workDO.QUANTITY_UM);
            paras[15] = new SqlParameter("@WAREHOUSE", workDO.WAREHOUSE == String.Empty ? DBNull.Value : (object)workDO.WAREHOUSE);
            paras[16] = new SqlParameter("@FROM_LOC", workDO.FROM_LOC == String.Empty ? DBNull.Value : (object)workDO.FROM_LOC);
            paras[17] = new SqlParameter("@TO_LOC", workDO.TO_LOC == String.Empty ? DBNull.Value : (object)workDO.TO_LOC);
            paras[18] = new SqlParameter("@FROM_LPN", workDO.FROM_LPN == String.Empty ? DBNull.Value : (object)workDO.FROM_LPN);
            paras[19] = new SqlParameter("@ASSIGNED_USER", workDO.ASSIGNED_USER == String.Empty ? DBNull.Value : (object)workDO.ASSIGNED_USER);
            paras[20] = new SqlParameter("@ATTRIBUTE_NUM", workDO.ATTRIBUTE_NUM == 0 ? DBNull.Value : (object)workDO.ATTRIBUTE_NUM);
            paras[21] = new SqlParameter("@USER_STAMP", workDO.USER_STAMP == String.Empty ? DBNull.Value : (object)workDO.USER_STAMP);
            paras[22] = new SqlParameter("@DATE_TIME_STAMP", workDO.DATE_TIME_STAMP == DateTime.MinValue ? DBNull.Value : (object)workDO.DATE_TIME_STAMP);
            paras[23] = new SqlParameter("@INTERNAL_TASK_TYPE", workDO.INTERNAL_TASK_TYPE == String.Empty ? DBNull.Value : (object)workDO.INTERNAL_TASK_TYPE);
            paras[24] = new SqlParameter("@ATTRIBUTE1", workDO.ATTRIBUTE1 == String.Empty ? DBNull.Value : (object)workDO.ATTRIBUTE1);
            paras[25] = new SqlParameter("@ATTRIBUTE2", workDO.ATTRIBUTE2 == String.Empty ? DBNull.Value : (object)workDO.ATTRIBUTE2);
            paras[26] = new SqlParameter("@ATTRIBUTE3", workDO.ATTRIBUTE3 == String.Empty ? DBNull.Value : (object)workDO.ATTRIBUTE3);
            paras[27] = new SqlParameter("@ATTRIBUTE4", workDO.ATTRIBUTE4 == String.Empty ? DBNull.Value : (object)workDO.ATTRIBUTE4);
            paras[28] = new SqlParameter("@ATTRIBUTE5", workDO.ATTRIBUTE5 == String.Empty ? DBNull.Value : (object)workDO.ATTRIBUTE5);
            paras[29] = new SqlParameter("@ATTRIBUTE6", workDO.ATTRIBUTE6 == String.Empty ? DBNull.Value : (object)workDO.ATTRIBUTE6);
            paras[30] = new SqlParameter("@ATTRIBUTE7", workDO.ATTRIBUTE7 == String.Empty ? DBNull.Value : (object)workDO.ATTRIBUTE7);
            paras[31] = new SqlParameter("@ATTRIBUTE8", workDO.ATTRIBUTE8 == String.Empty ? DBNull.Value : (object)workDO.ATTRIBUTE8);
            paras[32] = new SqlParameter("@CURRENT_LOC", workDO.CURRENT_LOC == String.Empty ? DBNull.Value : (object)workDO.CURRENT_LOC);
            paras[33] = new SqlParameter("@CURRENT_LPN", workDO.CURRENT_LPN == String.Empty ? DBNull.Value : (object)workDO.CURRENT_LPN);
            paras[34] = new SqlParameter("@INVENTORY_STS", workDO.INVENTORY_STS == String.Empty ? DBNull.Value : (object)workDO.INVENTORY_STS);
            paras[35] = new SqlParameter("@INTERNAL_WAVE_NUM", workDO.INTERNAL_WAVE_NUM);
            paras[36] = new SqlParameter("@REFERENCE_CONT_NUM", workDO.REFERENCE_CONT_NUM);
            paras[37] = new SqlParameter("@TO_LPN", workDO.TO_LPN == String.Empty ? DBNull.Value : (object)workDO.TO_LPN);
            paras[38] = new SqlParameter("@REFERENCE_REQ_NUM", workDO.REFERENCE_REQ_NUM);
            paras[39] = new SqlParameter("@TO_QTY", workDO.TO_QTY);
            paras[40] = new SqlParameter("@CONFIRM_USER", workDO.CONFIRM_USER == String.Empty ? DBNull.Value : (object)workDO.CONFIRM_USER);


            paras[0].DbType = DbType.Decimal;
            paras[1].DbType = DbType.String;
            paras[2].DbType = DbType.Decimal;
            paras[3].DbType = DbType.String;
            paras[4].DbType = DbType.String;
            paras[5].DbType = DbType.String;
            paras[6].DbType = DbType.String;
            paras[7].DbType = DbType.Decimal;
            paras[8].DbType = DbType.Decimal;
            paras[9].DbType = DbType.String;
            paras[10].DbType = DbType.String;
            paras[11].DbType = DbType.String;
            paras[12].DbType = DbType.Decimal;
            paras[13].DbType = DbType.Decimal;
            paras[14].DbType = DbType.String;
            paras[15].DbType = DbType.String;
            paras[16].DbType = DbType.String;
            paras[17].DbType = DbType.String;
            paras[18].DbType = DbType.String;
            paras[19].DbType = DbType.String;
            paras[20].DbType = DbType.Decimal;
            paras[21].DbType = DbType.String;
            paras[22].DbType = DbType.Date;
            paras[23].DbType = DbType.String;
            paras[24].DbType = DbType.String;
            paras[25].DbType = DbType.String;
            paras[26].DbType = DbType.String;
            paras[27].DbType = DbType.String;
            paras[28].DbType = DbType.String;
            paras[29].DbType = DbType.String;
            paras[30].DbType = DbType.String;
            paras[31].DbType = DbType.String;
            paras[32].DbType = DbType.String;
            paras[33].DbType = DbType.String;
            paras[34].DbType = DbType.String;
            paras[35].DbType = DbType.Decimal;
            paras[36].DbType = DbType.Decimal;
            paras[37].DbType = DbType.String;
            paras[38].DbType = DbType.Decimal;
            paras[39].DbType = DbType.Decimal;
            paras[40].DbType = DbType.String;


            return paras;
        }

        private static IDbDataParameter[] UpdateWherePara(TaskDetailDO workDO)
        {
            SqlParameter[] paras = new SqlParameter[1];
            paras[0] = new SqlParameter("@INTERNAL_TASK_LINE_NUM", workDO.INTERNAL_TASK_LINE_NUM);
            return paras;
        }

        #endregion

        #region CopyTo
        public TaskDetailDO CopyTo()
        {
            TaskDetailDO workDO = new TaskDetailDO();
            workDO.TASK_TYPE = this.TASK_TYPE;
            workDO.TASK_ID = this.TASK_ID;
            workDO.CONDITION = this.CONDITION;
            workDO.REFERENCE_ID = this.REFERENCE_ID;
            workDO.REFERENCE_NUM_TYPE = this.REFERENCE_NUM_TYPE;
            workDO.REFERENCE_NUM = this.REFERENCE_NUM;
            workDO.REFERENCE_LINE_NUM = this.REFERENCE_LINE_NUM;
            workDO.COMPANY = this.COMPANY ;
            workDO.ITEM = this.ITEM;
            workDO.ITEM_DESC = this.ITEM_DESC;
            workDO.TOTAL_QTY = this.TOTAL_QTY;
            workDO.QUANTITY_UM = this.QUANTITY_UM ;
            workDO.WAREHOUSE = this.WAREHOUSE;
            workDO.FROM_LOC = this.FROM_LOC;
            workDO.TO_LOC = this.TO_LOC ;
            workDO.FROM_LPN = this.FROM_LPN ;
            workDO.TO_LPN = this.TO_LPN;
            workDO.ASSIGNED_USER = this.ASSIGNED_USER;
            workDO.ATTRIBUTE_NUM = this.ATTRIBUTE_NUM ;
            workDO.USER_STAMP = this.USER_STAMP ;
            workDO.DATE_TIME_STAMP = System.DateTime.Now ;
            workDO.INTERNAL_TASK_TYPE = this.INTERNAL_TASK_TYPE;
            workDO.ATTRIBUTE1 = this.ATTRIBUTE1;
            workDO.ATTRIBUTE2 = this.ATTRIBUTE2;
            workDO.ATTRIBUTE3 = this.ATTRIBUTE3;
            workDO.ATTRIBUTE4 = this.ATTRIBUTE4;
            workDO.ATTRIBUTE5 = this.ATTRIBUTE5;
            workDO.ATTRIBUTE6 = this.ATTRIBUTE6;
            workDO.ATTRIBUTE7 = this.ATTRIBUTE7;
            workDO.ATTRIBUTE8 = this.ATTRIBUTE8;
            workDO.CURRENT_LOC = this.CURRENT_LOC;
            workDO.CURRENT_LPN = this.CURRENT_LPN;
            workDO.INVENTORY_STS = this.INVENTORY_STS;
            return workDO;
        }
        #endregion

        #region GetValueFromFieldName
        public string GetValueFromFieldName(string stFieldName)
        {
            string fieldValue = null;

            switch (stFieldName)
            {
                case "INTERNAL_TASK_LINE_NUM":
                    fieldValue = this.INTERNAL_TASK_LINE_NUM + "";
                    break;
                case "TASK_TYPE":
                    fieldValue = this.TASK_TYPE;
                    break;
                case "INTERNAL_TASK_NUM":
                    fieldValue = this.INTERNAL_TASK_NUM + "";
                    break;
                case "TASK_ID":
                    fieldValue = this.TASK_ID;
                    break;
                case "CONDITION":
                    fieldValue = this.CONDITION;
                    break;
                case "REFERENCE_ID":
                    fieldValue = this.REFERENCE_ID;
                    break;
                case "REFERENCE_NUM_TYPE":
                    fieldValue = this.REFERENCE_NUM_TYPE;
                    break;
                case "REFERENCE_NUM":
                    fieldValue = this.REFERENCE_NUM + "";
                    break;
                case "REFERENCE_LINE_NUM":
                    fieldValue = this.REFERENCE_LINE_NUM + "";
                    break;
                case "COMPANY":
                    fieldValue = this.COMPANY;
                    break;
                case "ITEM":
                    fieldValue = this.ITEM;
                    break;
                case "ITEM_DESC":
                    fieldValue = this.ITEM_DESC;
                    break;
                case "TOTAL_QTY":
                    fieldValue = this.TOTAL_QTY + "";
                    break;
                case "QUANTITY_UM":
                    fieldValue = this.QUANTITY_UM;
                    break;
                case "WAREHOUSE":
                    fieldValue = this.WAREHOUSE;
                    break;
                case "FROM_LOC":
                    fieldValue = this.FROM_LOC;
                    break;
                case "TO_LOC":
                    fieldValue = this.TO_LOC;
                    break;
                case "FROM_LPN":
                    fieldValue = this.FROM_LPN;
                    break;
                case "TO_LPN":
                    fieldValue = this.TO_LPN;
                    break;
                case "ASSIGNED_USER":
                    fieldValue = this.ASSIGNED_USER;
                    break;
                case "ATTRIBUTE_NUM":
                    fieldValue = this.ATTRIBUTE_NUM + "";
                    break;
                case "USER_STAMP":
                    fieldValue = this.USER_STAMP;
                    break;
                case "DATE_TIME_STAMP":
                    fieldValue = this.DATE_TIME_STAMP + "";
                    break;
                case "INTERNAL_TASK_TYPE":
                    fieldValue = this.INTERNAL_TASK_TYPE;
                    break;
            }
            return fieldValue;
        }
        #endregion


        public static List<TaskDetailDO> GetListByColumns(Session sess, List<KeyValuePair<string, KeyValuePair<string, object>>> dcParam, string stOrderBy)
        {
            DataTable dtModel = null;

            try
            {
                dtModel = GetTableByColumns(sess, dcParam, stOrderBy);
                return LoadListFromDataView(dtModel.DefaultView);
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
            }
        }

        public static DataTable GetTableByColumns(Session sess, List<KeyValuePair<string, KeyValuePair<string, object>>> dcParam, string stOrderBy)
        {
            DataHelper helper = null;
            StringBuilder sbSQL = null;
            int i = 0;
            IDataParameter[] pars = null;

            try
            {
                helper = new DataHelper(sess);
                sbSQL = new StringBuilder(SelectSequel)
                    .Append(" WHERE 1=1 ");

                pars = new IDataParameter[dcParam.Count];
                foreach (KeyValuePair<string, KeyValuePair<string, object>> de in dcParam)
                {
                    sbSQL.Append(" AND ").Append(de.Key).Append(de.Value.Key).Append("@Value").Append(i);
                    pars[i] = new SqlParameter("@Value" + i, de.Value.Value);
                    i++;
                }

                if (!StringManager.IsEmpty(stOrderBy))
                {
                    sbSQL.Append(stOrderBy);
                }
                return helper.GetTable(CommandType.Text, sbSQL.ToString(), pars);
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                if (helper != null)
                    helper.Dispose();
            }
        }
    }
}
